Skip to content

【禁止合入】test(ci): 冒烟测试流水线负向验证 - #97

Open
openjiuwen-sync-bot[bot] wants to merge 2 commits into
openJiuwen-ai:730from
openjiuwenai:sync/pr-227
Open

【禁止合入】test(ci): 冒烟测试流水线负向验证#97
openjiuwen-sync-bot[bot] wants to merge 2 commits into
openJiuwen-ai:730from
openjiuwenai:sync/pr-227

Conversation

@openjiuwen-sync-bot

@openjiuwen-sync-bot openjiuwen-sync-bot Bot commented Aug 6, 2026

Copy link
Copy Markdown

Paired: GitHub #97GitCode !227

⚠️ 禁止合入 / DO NOT MERGE

本 PR 仅用于验证 agent-core-java 合入流水线能够捕获 jiuwen-test-java 的 smoke 失败。
验证完成后请直接关闭本 PR,不得合入目标分支。

验证目的

src/main/java 中加入一个最小、临时的故障注入,确认云端流水线会在冒烟测试阶段阻止不符合契约的生产代码。

临时改动

  • 模块:dev_tools/prompt_builder
  • 接口:MetaTemplateBuilder.streamBuild(Object, Object...)
  • 行为:在流式构建结果末尾追加 [INTENTIONAL_SMOKE_PIPELINE_FAILURE]
  • 预期失败用例:PromptStreamBuild001Test

本地验证结果:生产源码 mvn compile -DskipTests 通过;目标用例为 Tests run: 1, Failures: 1, Errors: 0, Skipped: 0,失败内容包含上述标记。

English summary

Pipeline negative test only. This PR intentionally changes the output contract of
MetaTemplateBuilder.streamBuild(Object, Object...) in the prompt-builder module.
The expected failing smoke case is PromptStreamBuild001Test. It contains no feature
or bug fix and must not be merged. Close the PR after the pipeline behavior is verified.

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.


antonjli seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

@openjiuwen-sync-bot openjiuwen-sync-bot Bot changed the title [WIP]【禁止合入】test(ci): 冒烟测试流水线负向验证 【禁止合入】test(ci): 冒烟测试流水线负向验证 Aug 6, 2026
@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: 01356fdbaa12a86ef78c0adfd102a675d2ab4b4f

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ❌FAILED Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ❌FAILED Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ❌FAILED Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ❌FAILED Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ❌FAILED Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ❌FAILED Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ❌FAILED Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

[验证] 评论接口连通性测试,稍后删除。

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

⚠️ 冒烟测试失败 — 自动根因分析报告

PR #​227 冒烟测试存在 3 个失败用例(环境问题 2 / 开发问题 1)。
采集时间:20260807165023

失败用例列表

# 类型 用例 原因(首行)
1 error com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001 Elasticsearch request failed: method=PUT, path=/database_test_169734fa_6d08_4cbb_87a8_626f3364f251__test_documents, stat
2 error com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002 failed to add unknown memory, reason: Elasticsearch request failed: method=PUT, path=/memory_engine_test_1ca6aa29_e1ab_4
3 failure com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 expected:

根因分析

1. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001

失败原因分类:环境问题

具体失败原因:ES 集群分片达上限 1000/1000,新建索引被拒。与 PR 改动无直接因果链。

修复建议:清理 ES 集群旧测试索引或调大 cluster.max_shards_per_node。

其他建议:这是环境容量问题,可重跑;非 PR 回归。


2. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002

失败原因分类:环境问题

具体失败原因:同 #​001,ES 分片上限。

修复建议:同 #​001。

其他建议:与 #​001 同源,修一处即解。


3. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001

失败原因分类:开发问题

具体失败原因:but was 末尾多了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE],PR 改了 MetaTemplateBuilder.streamBuild 返回值。

修复建议:回退 streamBuild 改动,去掉注入的标记字符串。

其他建议:本 PR 为负向验证(禁止合入),建议关闭 PR。


完整根因分析(含证据来源、修复代码 before/after)见 CI 产物目录下的 analysis.md / analysis.html

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

⚠️ 冒烟测试失败 — 自动根因分析报告

PR #​227 冒烟测试存在 3 个失败用例(环境问题 2 / 开发问题 1)。
采集时间:20260807165023

失败用例列表

# 类型 用例 原因(首行)
1 error com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001 Elasticsearch request failed: method=PUT, path=/database_test_169734fa_6d08_4cbb_87a8_626f3364f251__test_documents, stat
2 error com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002 failed to add unknown memory, reason: Elasticsearch request failed: method=PUT, path=/memory_engine_test_1ca6aa29_e1ab_4
3 failure com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 expected:

根因分析

1. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001

失败原因分类:环境问题

具体失败原因:ES 集群分片达上限 1000/1000,新建索引被拒。与 PR 改动无直接因果链。

修复建议:清理 ES 集群旧测试索引或调大 cluster.max_shards_per_node。

其他建议:这是环境容量问题,可重跑;非 PR 回归。


2. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002

失败原因分类:环境问题

具体失败原因:同 #​001,ES 分片上限。

修复建议:同 #​001。

其他建议:与 #​001 同源。


3. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001

失败原因分类:开发问题

具体失败原因:but was 末尾多了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE]。

修复建议:回退 streamBuild 改动。

其他建议:负向验证 PR,建议关闭。


完整根因分析(含证据来源、修复代码 before/after)见 CI 产物目录下的 analysis.md / analysis.html

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

⚠️ 冒烟测试失败 — 自动根因分析报告

PR #​227 冒烟测试存在 3 个失败用例(环境问题 2 / 开发问题 1)。
采集时间:20260807165023

失败用例列表

# 类型 用例 原因(首行)
1 error com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001 Elasticsearch request failed: method=PUT, path=/database_test_169734fa_6d08_4cbb_87a8_626f3364f251__test_documents, stat
2 error com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002 failed to add unknown memory, reason: Elasticsearch request failed: method=PUT, path=/memory_engine_test_1ca6aa29_e1ab_4
3 failure com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 expected:

根因分析

1. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001

失败原因分类:环境问题

具体失败原因:ES 集群分片达上限 1000/1000,新建索引被拒。

修复建议:清理 ES 集群旧测试索引。

其他建议:环境问题,可重跑。


2. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002

失败原因分类:环境问题

具体失败原因:同 #​001。

修复建议:同 #​001。

其他建议:同源。


3. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001

失败原因分类:开发问题

具体失败原因:but was 末尾多了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE]。

修复建议:回退 streamBuild 改动。

其他建议:负向验证 PR,建议关闭。


📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md。HTML 报告见 CI 产物目录 analysis.html

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

⚠️ 冒烟测试失败 — 自动根因分析报告

PR #​227 冒烟测试存在 1 个失败用例(开发问题 1)。
采集时间:20260812153146

失败用例列表

# 类型 用例 原因(首行)
1 failure com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 expected:

根因分析

1. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001

失败原因分类:开发问题

具体失败原因:PR #​227 的合入 commit eacc8003MetaTemplateBuilder.streamBuild() 方法的返回语句中故意追加了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE] 标记字符串,导致流式构建的 prompt 输出末尾多出该标记,与测试断言期望的纯 prompt 内容不匹配。这是一次故意的负向验证——提交说明 test(ci): 重新触发冒烟失败验证 和前一个 commit 01356fdb(提交说明 test(ci): 注入冒烟流水线负向验证)明确表明该改动的目的就是让冒烟流水线失败,以验证 CI 负向检测能力。

修复建议:不修复代码——关闭或回退 PR。该 PR 的目的是验证冒烟流水线能否正确检测到失败(负向验证),而非功能开发。负向验证已通过(流水线确实报告了失败),PR 应关闭或回退,将 MetaTemplateBuilder.streamBuild() 恢复为 return result.toString();

其他建议:- 负向验证 PR 不应合入目标分支,应在验证完成后立即回退。建议在 CI 流水线中增加对负向验证 PR 的自动标记和回退机制,避免人工遗漏。

  • 若需保留冒烟流水线负向验证能力,建议将其作为 CI 脚本层面的注入(如临时 patch 或环境变量),而非在源码中硬编码失败标记,避免污染代码仓库历史。

📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ❌FAILED Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

⚠️ 冒烟测试失败 — 自动根因分析报告

PR #​227 冒烟测试存在 3 个失败用例(环境问题 2 / 开发问题 1)。

  • 失败用例数:3
  • 失败原因分类:环境问题 2 / 开发问题 1
  • 采集时间:20260807165023

失败用例列表

# 类型 用例 原因(首行)
1 error com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001 Elasticsearch request failed: method=PUT, path=/database_test_169734fa_6d08_4cbb_87a8_626f3364f251__test_documents, stat
2 error com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002 failed to add unknown memory, reason: Elasticsearch request failed: method=PUT, path=/memory_engine_test_1ca6aa29_e1ab_4
3 failure com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 expected:

根因分析

1. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001

失败原因分类

环境问题

具体失败原因

Elasticsearch 集群分片数已达上限(1000/1000),创建新索引时触发 validation_exception,导致测试用例中 ElasticsearchVectorStore.createCollection 调用失败。与 PR #​227 代码变更无因果关联。

证据来源

  • 日志关键信息: Elasticsearch request failed: method=PUT, path=/database_test_xxx, status=400, body={"error":{"root_cause":[{"type":"validation_exception","reason":"this action would add [2] shards, but this cluster currently has [1000]/[1000] maximum normal shards open"}]}}
  • 代码定位: com.openjiuwen.core.retrieval.vector_store.ElasticsearchVectorStore.requestText(ElasticsearchVectorStore.java:981) → createCollection → ensureCollection
  • 其他: PR #​227 仅变更 MetaTemplateBuilder.java,与 ES 操作无调用链关联

修复建议

  1. 清理 ES 集群遗留测试索引(database_test_、memory_engine_test_)
  2. 调整 cluster.max_shards_per_node 上限
  3. 测试 teardown 删除临时索引
  4. 重新运行测试验证

其他建议

环境问题,不应阻塞 PR 合入。CI 建议每次测试前清 ES 索引。


2. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002

失败原因分类

环境问题

具体失败原因

同 #​001,ES 分片上限,LongTermMemory.addMessages 写 memory 索引时 400。

证据来源

  • 日志关键信息: [158002] failed to add unknown memory, reason: Elasticsearch request failed status=400
  • 代码定位: LongTermMemory.addMessages(LongTermMemory.java:458)
  • 其他: 与 #​001 同源

修复建议

同 #​001。

其他建议

同源,修一处即解。


3. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001

失败原因分类

开发问题

具体失败原因

PR #​227 在 MetaTemplateBuilder.streamBuild 中将 return result.toString() 改为 return result.append("[INTENTIONAL_SMOKE_PIPELINE_FAILURE]").toString(),流式输出末尾多出标记,断言失败。负向验证 PR。

证据来源

  • 日志关键信息: 断言 expected 末尾"你是一个旅行助手\n",but was 末尾多了"[INTENTIONAL_SMOKE_PIPELINE_FAILURE]"
  • 代码定位: MetaTemplateBuilder.java:151,diff - return result.toString(); → + return result.append("[INTENTIONAL_SMOKE_PIPELINE_FAILURE]").toString();
  • 其他: 提交说明"test(ci): 重新触发冒烟失败验证"确认负向验证意图

修复建议

回退 streamBuild 改动,或关闭/回退该 PR。

其他建议

负向验证 PR,不应合入主分支。


📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

⚠️ 冒烟测试失败 — 自动根因分析报告

PR #​227 冒烟测试存在 1 个失败用例(开发问题 1)。

  • 失败用例数:1
  • 失败原因分类:开发问题 1
  • 采集时间:20260812155906

失败用例列表

# 类型 用例 原因(首行)
1 failure com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 expected:

根因分析

1. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001

失败原因分类

开发问题

具体失败原因

PR #​227 在 MetaTemplateBuilder.streamBuild() 方法的返回值中故意追加了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE] 标记,导致流式构建的 prompt 输出末尾多出该字符串,与测试断言的预期值不匹配。该 PR 的提交说明为 test(ci): 重新触发冒烟失败验证,属于故意注入的负向验证:目的是让冒烟流水线检测到测试失败,从而验证流水线的负向检测能力是否正常工作。失败是预期行为,不是代码 bug。

证据来源

  • 日志关键信息: 断言消息中 but was 末尾多了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE],而 expected 中没有该标记。差异点精确出现在 你是一个旅行助手 之后,but was 追加了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE]
  • 代码定位: src/main/java/com/openjiuwen/dev_tools/prompt_builder/builder/MetaTemplateBuilder.java:151(改后行),return result.append("[INTENTIONAL_SMOKE_PIPELINE_FAILURE]").toString();
  • PR diff: MetaTemplateBuilder.java 第 148 行区域,-return result.toString(); 改为 +return result.append("[INTENTIONAL_SMOKE_PIPELINE_FAILURE]").toString();
  • 提交说明: test(ci): 重新触发冒烟失败验证,明确表明这是 CI 负向验证测试。

修复建议

不修复代码——关闭或回退 PR。该 PR 是故意注入的冒烟流水线负向验证,其唯一改动就是在 streamBuild() 返回值中追加破坏性标记 [INTENTIONAL_SMOKE_PIPELINE_FAILURE],目的是验证流水线能否正确检测到失败。既然流水线已成功捕获该失败(本次分析即证明),说明负向验证目的已达成,应关闭或回退该 PR,恢复 MetaTemplateBuilder.streamBuild() 的原始行为。

其他建议

  • 同类风险: 若后续仍需做冒烟流水线负向验证,建议通过 CI 配置/环境变量注入故障标记,而非在业务代码中硬编码破坏性字符串,避免合入后遗忘回退导致生产环境异常。
  • 责任人: PR 作者 antonjli,应在确认负向验证通过后及时回退该 commit。
  • 历史关联: 此前 PR #​227 的另一个 commit 01356fdb(提交说明 test(ci): 注入冒烟流水线负向验证)也是同类负向验证,当前 commit eacc8003 是重新触发验证。

📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ❌FAILED Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

[验证] Anton-bot 评论权限测试,稍后删除。

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

⚠️ 冒烟测试失败 — 自动根因分析报告

PR #​227 冒烟测试存在 3 个失败用例(开发问题 1)。

  • 失败用例数:3
  • 失败原因分类:开发问题 1
  • 采集时间:20260807165023

失败用例列表

# 类型 用例 原因(首行)
1 error com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001 Elasticsearch request failed: method=PUT, path=/database_test_169734fa_6d08_4cbb_87a8_626f3364f251__test_documents, stat
2 error com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002 failed to add unknown memory, reason: Elasticsearch request failed: method=PUT, path=/memory_engine_test_1ca6aa29_e1ab_4
3 failure com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 expected:

根因分析

1. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase001#testEsEmbeddingDatabase001

(未生成该用例的分析内容)


2. com.openjiuwen.test.cases.database.TestEsEmbeddingDatabase002#testEsEmbeddingDatabase002

(未生成该用例的分析内容)


3. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001

失败原因分类

开发问题

具体失败原因

PR #​227 在 MetaTemplateBuilder.streamBuild 改了返回值,末尾多出 [INTENTIONAL_SMOKE_PIPELINE_FAILURE] 标记。负向验证 PR。

证据来源

  • 日志: 断言 but was 末尾多了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE]
  • 代码: MetaTemplateBuilder.java:151

修复建议

回退 streamBuild 改动或关闭 PR。

其他建议

负向验证 PR,不应合入。


📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

⚠️ 冒烟测试失败 — 自动根因分析报告

PR #​227 冒烟测试存在 1 个失败用例(开发问题 1)。

  • 失败用例数:1
  • 失败原因分类:开发问题 1
  • 采集时间:20260812170947

失败用例列表

# 类型 用例 原因(首行)
1 failure com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001 expected:

根因分析

1. com.openjiuwen.test.cases.prompt_build.PromptStreamBuild001Test#testPromptStreamBuild001

失败原因分类

开发问题

具体失败原因

PR #​227 在 MetaTemplateBuilder.streamBuild 方法的返回值中故意追加了 [INTENTIONAL_SMOKE_PIPELINE_FAILURE] 标记字符串,导致流式构建 prompt 的输出末尾多出该标记,与测试断言的预期值(不含此标记)不匹配。该改动由提交 eacc8003 引入,提交说明为 test(ci): 重新触发冒烟失败验证,属于故意注入的负向验证——用于检验冒烟流水线能否正确检测到测试失败,而非真实的业务回归。

证据来源

  • 日志关键信息: 断言消息 but was 末尾多出 [INTENTIONAL_SMOKE_PIPELINE_FAILURE],而 expected 中无此标记;异常类型为 org.opentest4j.AssertionFailedError
  • 代码定位: src/main/java/com/openjiuwen/dev_tools/prompt_builder/builder/MetaTemplateBuilder.java:151(原 return result.toString(); 被改为 return result.append("[INTENTIONAL_SMOKE_PIPELINE_FAILURE]").toString();
  • 其他: PR diff 显示该文件仅此一处变更(+1/-1);提交说明 test(ci): 重新触发冒烟失败验证 明确表明这是 CI 负向验证

修复建议

不修复代码——关闭或回退 PR。本次失败是 PR 故意注入的负向验证标记,目的在于验证冒烟流水线的失败检测能力。冒烟流水线已成功检测到该失败(即负向验证目的已达成),应将 MetaTemplateBuilder.java:151 恢复为原始的 return result.toString();,或直接关闭/回退此 PR。

其他建议

  • 负向验证 PR 不应合入目标分支,验证完成后应立即回退注入的标记代码
  • 建议将此类负向验证纳入 CI 流程的自动化机制:注入标记 → 跑流水线 → 验证失败检测 → 自动回退标记,避免人工手动操作导致标记遗漏
  • 同类风险:若未来有类似的负向验证 PR,应在提交说明和 PR 描述中明确标注"此 PR 为 CI 负向验证,禁止合入",防止误合入

📎 完整根因分析(含证据来源、修复代码 before/after):analysis.md

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: eacc8003917a03067ec9728f0693b28bb198088e

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ❌FAILED Click here
Maven Build ✅SUCCESS See CHECK tab

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant